📝 Резюме · 📄 Оригинал (1.2 KB)
https://t.me/Python_libr/3363
Модуль user_agents в Python
Источник: https://t.me/Python_libr/3363
Что такое User Agent?
User Agent — это строка, которую браузер отправляет на сервер в заголовке HTTP запроса. Содержит информацию об устройстве, операционной системе, браузере и его версии. Пример:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
Почему нужен модуль user_agents?
Парсинг User Agent строк вручную — это кошмар. Модуль user_agents упрощает этот процесс, предоставляя удобный API для извлечения информации об устройстве.
Установка
pip install user-agents
Базовое использование
from user_agents import parse
# Парсим User Agent строку
ua_string = (
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 Chrome/91.0.4472.124 Safari/537.36'
)
user_agent = parse(ua_string)
# Информация о браузере
print(user_agent.browser.family) # Chrome
print(user_agent.browser.version_string) # 91.0.4472.124
# Информация об ОС
print(user_agent.os.family) # Windows
print(user_agent.os.version_string) # 10
# Информация об устройстве
print(user_agent.device.family) # Other
print(user_agent.device.brand) # None
print(user_agent.device.model) # None
# Проверки
print(user_agent.is_mobile) # False
print(user_agent.is_tablet) # False
print(user_agent.is_pc) # True
Примеры разных User Agent'ов
from user_agents import parse
# Мобильный телефон
mobile_ua = (
'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) '
'AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 '
'Mobile/15E148 Safari/604.1'
)
mobile = parse(mobile_ua)
print(mobile.is_mobile) # True
print(mobile.os.family) # iOS
print(mobile.browser.family) # Mobile Safari
# Планшет
tablet_ua = (
'Mozilla/5.0 (iPad; CPU OS 14_7_1 like Mac OS X) '
'AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 '
'Mobile/15E148 Safari/604.1'
)
tablet = parse(tablet_ua)
print(tablet.is_tablet) # True
print(tablet.device.family) # iPad
Практическое применение
Аналитика трафика
from django.http import HttpResponse
from user_agents import parse
def analytics_view(request):
# Получаем User Agent из request
user_agent = parse(request.META.get('HTTP_USER_AGENT', ''))
# Логируем информацию о посетителе
Analytics.objects.create(
user_id=request.user.id if request.user.is_authenticated else None,
browser=user_agent.browser.family,
browser_version=user_agent.browser.version_string,
os=user_agent.os.family,
is_mobile=user_agent.is_mobile,
is_tablet=user_agent.is_tablet,
device_type='mobile' if user_agent.is_mobile else 'desktop'
)
return HttpResponse('OK')
Дифференцированное отображение контента
def content_view(request):
user_agent = parse(request.META.get('HTTP_USER_AGENT', ''))
# Показываем мобильную версию для телефонов
if user_agent.is_mobile:
template = 'mobile_version.html'
# Облегченная версия для планшетов
elif user_agent.is_tablet:
template = 'tablet_version.html'
# Полная версия для десктопа
else:
template = 'desktop_version.html'
return render(request, template)
Защита от ботов
def api_endpoint(request):
user_agent = parse(request.META.get('HTTP_USER_AGENT', ''))
# Блокируем подозрительные боты
bot_signatures = ['bot', 'crawler', 'spider', 'scraper']
ua_lower = user_agent.browser.family.lower()
if any(bot_sig in ua_lower for bot_sig in bot_signatures):
return JsonResponse(
{'error': 'Bot access denied'},
status=403
)
# Обрабатываем запрос
return JsonResponse({'data': 'OK'})
Диаграмма парсинга
graph LR
A["HTTP Request<br/>с User Agent"] --> B["user-agents<br/>парсер"]
B --> C["Browser<br/>family, version"]
B --> D["OS<br/>family, version"]
B --> E["Device<br/>brand, model, type"]
C --> F["is_mobile<br/>is_tablet<br/>is_pc"]
Все доступные атрибуты
user_agent = parse(ua_string)
# Browser
user_agent.browser.family
user_agent.browser.version_string
# OS
user_agent.os.family
user_agent.os.version_string
# Device
user_agent.device.family # iPhone, iPad, etc
user_agent.device.brand # Apple, Samsung, etc
user_agent.device.model # iPhone 12, Galaxy S21, etc
# Логические проверки
user_agent.is_mobile # Boolean
user_agent.is_tablet # Boolean
user_agent.is_pc # Boolean
user_agent.is_bot # Boolean
Лучшие практики
- Кешируйте результаты парсинга для высоконагруженных приложений
- Комбинируйте с IP геолокацией для полного профиля пользователя
- Регулярно обновляйте базу данных User Agent'ов
- Не полагайтесь только на User Agent для определения устройства
- Логируйте аномальные User Agent'ы для выявления новых ботов